package com.cz.video.website.service;


import com.cz.video.common.core.domain.PageQuery;
import com.cz.video.common.core.page.TableDataInfo;
import com.cz.video.website.domain.bo.WebsiteHistoryBo;
import com.cz.video.website.domain.vo.WebsiteHistoryVo;

import java.util.List;

/**
 * <p>
 * 历史记录 服务类
 * </p>
 * @since 2023-07-06
 */
public interface WebsiteHistoryService {

  /**
   * 根据条件分页查询历史记录
   *
   * @param historyBo 查询条件
   * @param pageQuery 分页条件
   *
   * @return 分页的历史记录数据
   */
  TableDataInfo<WebsiteHistoryVo> page(WebsiteHistoryBo historyBo, PageQuery pageQuery);


  /**
   * 根据条件获取所有历史记录信息
   *
   * @return 历史记录list
   */
  List<WebsiteHistoryVo> list(WebsiteHistoryBo historyBo);
  /**
   * 根据 id 查询历史记录信息
   *
   * @param id id
   * @return 历史记录
   */
  WebsiteHistoryVo get(Long id);

  /**
   * 新增历史记录信息
   *
   * @param historyBo 历史记录信息
   *
   * @return 修改记录数量
   */
  int add(WebsiteHistoryBo historyBo);

  /**
   * 修改保存历史记录信息
   *
   * @param historyBo 历史记录信息
   * @return 修改数据数量
   */
  int update(WebsiteHistoryBo historyBo);

    /**
     * 通过ID删除历史记录
     *
     * @param ids 历史IDs
     * @return 修改点赞数据数量
     */
    int deleteByIds(Long[] ids);

  /**
   * 添加，如果不存在
   * @param historyBo
   * @return
   */
  boolean addOrUpdate(WebsiteHistoryBo historyBo);

    /**
     * 刷新历史记录到数据库
     * @param clientUserId 用户ID
     * @return
     */
    boolean reflush(Long clientUserId);

    /**
     * 刷新历史记录到数据库
     * @param userIdList 用户ID
     * @return
     */
    boolean reflushBatch(List<Long> userIdList);

    /**
     * 刷新所有的历史记录到数据库
     * @return
     */
    boolean refreshAll();

  /**
   * 添加历史记录到数据库。注意：historyBo字段必须有值
   * @param historyBo
   * @return
   */
  boolean addCache(WebsiteHistoryBo historyBo);

}
